package cn.fighter3.service;

import cn.fighter3.entity.node.Book;
import cn.fighter3.entity.node.People;
import com.carrotsearch.hppc.HashOrderMixing;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;

import java.util.List;


public interface QuestionRepository extends Neo4jRepository<People,String> {
    //    问题13 某作者写了什么书
    @Query("match (n)-[r:Authorof]->(b:People) where b.authorName={name} return n")
    List<Book> getBook(@Param("name") String name);

    //问题14 某书的作者是谁
    @Query("match (n)-[r:Authorof]->(b:People) where n.title={title} return b")
    List<People> getAuthor(@Param("title") String title);

    //问题15 某书的出版时间
    @Query("match (n) where n.title={title} return n.m_PUB_YEAR")
    String getYear(@Param("title") String title);

    //问题16 某书的出版社
    @Query("match (n) where n.title={title} return n.M_PUBLISHER")
    String getPublisher(@Param("title") String title);

    //问题17 某书的类型
    @Query("match (n) where n.title={title} return distinct labels(n)")
    List<String> getClass1(@Param("title") String title);

    //问题18 某家出版社出版的书
    @Query("match (n) where n.M_PUBLISHER={publisher} return n limit 25")
    List<Book> getBooks1(@Param("publisher") String publisher);

    //问题19 某年出版了哪些书
    @Query("match (n) where n.M_PUB_YEAR={year} return n limit 25")
    List<Book> getBooks2(@Param("year") String year);

    //问题20 某作者写过几本书
    @Query("match(n)-[r:Authorof]->(b:People) where b.authorName={name} return count(n)")
    Integer getBookcount(@Param("name") String name);

    //问题21 某作者写过什么类型的书
    @Query("match(n)-[r:Authorof]->(b:People) where b.authorName={name} return distinct labels(n)")
    List<String> getClass2(@Param("name") String name);

    //问题22  某人  借阅过什么书
    @Query("match(n:People)-[r:Lend]->(b) where n.authorName={name} return b")
    List<String> getlentBook(@Param("name") String name);

    //问题23  某书  被谁读过  找读者
    @Query("match (n:People)-[r:Lend]->(b) where b.title={title} return n")
    List<People> getReader(@Param("title") String title);

    //问题24 某人  借阅  某书的时间
    @Query("match (n:People)-[r:Lend]->(b) where n.authorName={name} and b.title={title} return r.lendTime")
    String getTime(@Param("name") String name,@Param("title") String title);
}




